2017/03/31

ジオイド+DEMのPNGタイルを作ってみた

国土地理院のDEM(標高)タイル。少し前はテキスト形式のタイルだけだったのがPNGタイルの配信が始まったと聞いたので使ってみました。

これは数値をピクセルのRBGの値にエンコードしたもので、テキストタイルよりかなり容量が小さい。
(出典:Web利用に適した標高ファイルフォーマットの考察と実装- 西岡芳晴・長津樹理、情報地質第26巻第4号、2015))

ただ、GPSで取れる高度は「楕円体高」なので、どちらかというとDEM(標高=海抜0mからの高さ)ではなくて、地表の楕円体高(= ジオイド高 + 標高)のタイルが欲しい。
国土地理院ではジオイドのデータもダウンロードできます。
(図の出展:国土地理院「ジオイドとは」より http://www.gsi.go.jp/buturisokuchi/geoid.html)

という訳で
  1. 地理院の標高PNGタイルをダウンロードする
  2. 各ピクセルに相当する場所のジオイド高を取得して、DEM値に加算する
  3. 再度PNGファイルにエンコードする
  4. クライアントに送る
というものをPHPで作ってみました。

例:
元の国土地理院のDEMファイル
 http://cyberjapandata.gsi.go.jp/xyz/dem_png/14/14361/6510.png
 

こちらがジオイド値を加算したもの。
 http://geoidtile.locapoint.com/ellipGndAlt.php?z=14&x=14361&y=6510

ちなみにジオイドのみ。この拡大レベルだとほとんど均一。
http://geoidtile.locapoint.com/ellipGndAlt.php?z=14&x=14361&y=6510&geoidonly=1

なお、ジオイドデータは地理院のファイル「gsigeo2011_ver2.asc」を使用、任意の緯度経度のジオイド値の計算は同資料に添付されている取り扱い説明書の「ジオイド高内挿計算方法」をつかいました。

ジオイドデータは19MBもあって都度読込むと大変遅いので、このデータから無効データを除外したものをmySQLに格納、必要なデータだけ呼び出すようにした。

PHPコードとデータのSQLダンプはこちら( https://github.com/naokiueda/ellipGndAlt )に置きましたので、ご興味のある方は自由に使ってください。

.htaccessにこんな感じでReWriteをかければ
RewriteRule ^/([0-9]+)/([0-9]+)/([0-9]+).png$ ellipGndAlt.php?z=$1&x=$2&y=$3
url...../{z}/{x}/{y}.png 形式の標準的なタイルURLになると思います。

確認用に呼び出しサンプルも作ってみた。
http://geoidtile.locapoint.com/sample.html

あまり考えずに「作ってみた」レベルなので死ぬほどレスポンスが悪いです。
またいつ消すか分からないので、ここで実装している
http://geoidtile.locapoint.com/ellipGndAlt.php?z={z}&x={x}&y={y}
をタイルソースとして恒久的に利用するのはご遠慮ください。




0 件のコメント: